<?php

class Excel extends Controller {

	var $tituloListado   = "Listado";
	var $tituloCrear     = "Crear ";
	var $tituloModificar = "Modificar ";
	var $carpetaVista = '';
	var $modelo;
	var $carpetatmp = './tmp/';
	var $objPHPExcel = NULL;

	// =================================================
	function Excel()
	{
		parent::Controller();
		// Definir el nombre de la session
		$this->sesion->setNombreSesion('cms_conquer');

		$this->load->helper('url');

		/**
		 * Verificar que la sesion se autentifico
		 */
		if (!$this->sesion->sesion_valida()){
			redirect('login_control');
			exit(0);
		}

		if (!$this->sesion->existe(array('privilegios','impexpo','ver'))){

			//$this->sesion->invalidar_sesion();
			$this->sesion->set_userdata('error',"<p>No posee permisos para acceder a la secci&oacute;n solicitada.</p>");
			//redirect('');
			redirect('conquer');
			exit(0);

		}
		$this->carpetaVista = 'conquer/';
		$this->load->library('PHPExcel');
		//$this->load->library('PHPExcel/IOFactory');
	}

	// =================================================
	function index()
	{
		$data['titulo_pagina'] = 'Home';
		$this->load->helper(array('html','url','form'));
		$this->load->view('conquer/cabecera');
		$this->load->view('conquer/navegacion');
		//$this->load->view('conquer/opciones'); //echo 'mostrar opciones de excel: exportar e importar';
		$this->load->view('conquer/pie');
	}

	// =================================================
	function importar()
	{


		$data['titulo_pagina'] = 'Importar Usuarios';
		$this->load->helper(array('html','url','form'));
		$this->load->view('conquer/cabecera');
		$this->load->view('conquer/navegacion');
		$this->load->view('conquer/error');
		$this->load->view('conquer/excel/importar',$data); //echo 'mostrar opciones de excel: exportar e importar';
		$this->load->view('conquer/pie');
	}

	// =================================================
	function exportar()
	{
		// Obtener especialidades
		$this->load->model('especialidad');
		$data['especialidad'] = $this->especialidad->secProxy('getIdNombre');
		$data['especialidad'] = array('0'=>'No contemplar')+$data['especialidad'];
		
		$data['campos'] = array('Seleccione','nombre','apellido','email','ciudad');
		$data['titulo_pagina'] = 'Exportar Usuarios';
		$this->load->helper(array('html','url','form'));
		$this->load->view('conquer/cabecera');
		$this->load->view('conquer/navegacion');
		$this->load->view('conquer/excel/exportar',$data); //echo 'mostrar opciones de excel: exportar e importar';
		$this->load->view('conquer/pie');
	}

	// =================================================
	function aExcel($model)
	{
		ini_set('memory_limit','60M');
		
		$this->load->model($model,'mod');
		$this->modelo =& $this->mod;
		$columnasAMostrar = array();

		for($i=0;$i<4;$i++){
			if ($this->input->post('Campo'.$i) !=='Seleccione'){
				$columnasAMostrar[] = $this->input->post('Campo'.$i);
			}
		}
		if (count($columnasAMostrar) == 0) { $columnasAMostrar = NULL; }

		$arrayCondicion = NULL;
		//Si la especialidad esta seteada tiene que traer solo esos medicos.
		if ($this->input->post('idespecialidad') != '0'){
			$arrayCondicion = array();
			$arrayCondicion['idespecialidad'] = $this->input->post('idespecialidad');
			//$this->modelo->setCondicion('idespecialidad',$this->input->post('idespecialidad'));
		}
		/** Reporte de Errores*/
		error_reporting(E_ALL);

		$objPHPExcel = new PHPExcel();

		$objPHPExcel->getProperties()->setCreator("OceanicSI")
		->setLastModifiedBy("OceanicSI")
		->setTitle("Pruebas excel")
		->setSubject("Pruebas Excel")
		->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
		->setKeywords("office 2007 openxml php")
		->setCategory("Test result file");

		//$data['metaData'] = $this->modelo->getMetaData();
		$data['resultado'] = $this->modelo->secProxy('busqueda_gen',$columnasAMostrar,$arrayCondicion);
		//******** Para las claves foraneas
		if (in_array('idciudad',$columnasAMostrar)){
			$this->load->model('ciudad','ciudad');
			$this->ciudad->setKeyField(TRUE);
			$ciudades = $this->ciudad->secProxy('getData');
		}

		//recursion($this,$data['metaData'],$data['resultado']['consulta'],$model);


		// Insertar Titulo
		$columna = 0;
		foreach($columnasAMostrar as $unaColumna) {
				
			if ($unaColumna=='idciudad'){
				$objPHPExcel->getActiveSheet()->setCellValue(chr(65+$columna).'1', 'Ciudad');
			}else{
				$objPHPExcel->getActiveSheet()->setCellValue(chr(65+$columna).'1', $unaColumna);
			}
			$columna++;
			//echo 'una columna: '.$unaColumna.'<br />';
		}
		// Insertar datos en el excel
		$fila=1;
		$cuenta=0;

		// Recorrer Columna
		foreach($data['resultado']['consulta'] as $valor){
			$fila++;
			$columna = 0; //echo '<pre>';print_r ($valor);echo '</pre>';exit();
			// Recorrer Fila
			foreach($valor as $key=>$unValor) {
				if(in_array($key,$columnasAMostrar) && $key!='idciudad') {
						
					$objPHPExcel->getActiveSheet()->setCellValue(chr(65+$columna).$fila, $unValor);
					$columna++;
				}else{
					$ciudad= isset($ciudades[$unValor])?$ciudades[$unValor]['nombre']:'';

					$objPHPExcel->getActiveSheet()->setCellValue(chr(65+$columna).$fila, $ciudad);
					$columna++;
				}
			}

		}


		$objPHPExcel->getActiveSheet()->setTitle('Doctores');
		$objPHPExcel->setActiveSheetIndex(0);
		$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
		$objWriter->save('tmp/excel.xls');
		header("Content-type: application/vnd.ms-excel");
		header("Content-Disposition:  filename=\"listado.xls\";");
		echo file_get_contents('tmp/excel.xls');
	}

	function subirArchivo()
	{
		// Por post pasar el archivo .. $nombreArchivo
		//echo ;
		/** Error reporting */
		//error_reporting(E_ALL);

		//$nombre_archivo = $_FILES;

		//print_r($_FILES);

		$config['upload_path'] = $this->carpetatmp;
		$config['allowed_types'] = 'xls';
		$config['overwrite'] = TRUE;
		//$config['max_size'] = '100';

		$this->load->library('upload', $config);
		if (!$this->upload->do_upload('archivoexcel')){
			$this->sesion->set_userdata('error',$this->upload->display_errors());
			redirect('excel/importar');
			exit(0);
		}
		$datosArchivo = $this->upload->data();
		$nombreArchivo = $datosArchivo['file_name'];

		// Desde aca que se utiliza la variable $srcArchivo para ubicar al archivo
		$srcArchivo = $this->carpetatmp.$nombreArchivo;

		//exit(0);
		// ----------------------------------------------
		/** PHPExcel_IOFactory */
		//require_once 'PHPExcel/IOFactory.php';
		$this->cargarCombos($srcArchivo);

	}

	function cargarCombos($srcArchivo)
	{

		$this->load->model('usuario','modelo');
		$opciones = $this->modelo->getImportar();

		if (!file_exists($srcArchivo)) {
			//exit("El archivo no se encuentra. \n");
			$this->sesion->set_userdata('error',"<p>Error al procesar el archivo.</p>");
			redirect('excel/importar');
			exit(0);
		}
		
		$resultado = getDatosExcel($srcArchivo,1,1);
		
		//print_r($resultado['datos']);
		
		$datosExcel = $resultado['datos'][1];
		array_unshift($datosExcel,'No contemplar');

		$this->sesion->set_userdata('srcArchivo',$srcArchivo);

		//print_r($datosExcel);
		$data['titulo_pagina'] = 'Importar Usuarios';
		$data['opciones'] = $opciones;
		$data['datosExcel'] = $datosExcel;

		$this->load->helper(array('html','url','form'));
		$this->load->view('conquer/cabecera');
		$this->load->view('conquer/navegacion');
		$this->load->view('conquer/error');
		$this->load->view('conquer/excel/combos',$data); //echo 'mostrar opciones de excel: exportar e importar';
		$this->load->view('conquer/pie');

	}

	function procesarArchivo()
	{
		//ini_set('memory_limit','50M');
		
		$srcArchivo = $this->sesion->userdata('srcArchivo');
		//echo $srcArchivo;
		$this->load->model('usuario','modelo');
		$opciones = $this->modelo->getImportar();

		if (!file_exists($srcArchivo)) {
			//exit("El archivo no se encuentra. \n");
			$this->sesion->set_userdata('error',"<p>Error al procesar el archivo.</p>");
			redirect('excel/importar');
			exit(0);
		}
		$seleccionados = array();

		foreach ($opciones as $key=>$valor){
			if ($this->input->post($key)!=0) {
				$seleccionados[$this->input->post($key)] = $key;
			}
		}
		
		if (count($seleccionados)<0) {
			$this->sesion->set_userdata('error',"<p>No selecciono ninguna columna.</p>");
			$this->cargarCombos($srcArchivo);
			return;
		}
		
		//echo "antes de todo".(memory_get_usage(true) / 1024 / 1024)."<br>";

		
		// Pasar la info que usa leerregistros
		$_SESSION['importarexcel'] = array(
				'src'=>$srcArchivo,
				'seleccionados'=>$seleccionados,
				'modelo'=>'usuario',
				'offset'=>'2'
		);
		
		$this->leerregistros();

		//echo "zzdespues de todo".(memory_get_usage(true) / 1024 / 1024)."<br>";


	}
	
	/**
	 * Tiene un loop, se redirecciona a si misma para continuar trabajando
	 * pero con la memoria liberada.
	 * @return unknown_type
	 */
	function leerregistros(){
		
		//echo "antes de todo".(memory_get_usage(true) / 1024 / 1024)."<br>";
		
		$limitePorCiclo = 1000;
		
		$datosImp = $_SESSION['importarexcel']; 
		
		//print_r($_SESSION['importarexcel']);
		
		$srcArchivo = $datosImp['src'];
		$seleccionados = $datosImp['seleccionados'];
		$modelo = $datosImp['modelo'];
		
		$offset = isset($datosImp['offset'])?$datosImp['offset']:1;
		$insertados = isset($datosImp['insertados'])?$datosImp['insertados']:0;
		
		$resultado = getDatosExcel($srcArchivo,$offset,$limitePorCiclo,$seleccionados,$sinVacios = false);
		//echo 'sas';
		//print_r($resultado);
		if (count($resultado['datos'])>0){
			$this->load->model($modelo,'modelo');
			$insertados+= $this->modelo->guardarVarios($resultado['datos']);
		} else {
			//echo 'listo<br />';
			//$insertados = 0;
		}
		
		alertar("Insertado en DB: ".$insertados." Offset: ".$offset." Maximo:".$limitePorCiclo." Source:".$srcArchivo);
		
		
		//$insertados+=$resultado['datos'];
		
		if ($resultado['excedido'] === true) {
			
			$_SESSION['importarexcel'] = array(
					'src'=>$srcArchivo,
					'seleccionados'=>$seleccionados,
					'modelo'=>'usuario',
					'offset'=>$offset+$limitePorCiclo,
					'insertados'=>$insertados
			);
			
			redirect('excel/leerregistros');
			exit(0);
			
		}	
		
		//print_r($_SESSION['importarexcel']);
		
		//echo "ultimodespues de todo".(memory_get_usage(true) / 1024 / 1024)."<br>";
		
		$data['titulo_pagina'] = 'Carga Exitosa';
		$data['resultado'] = $insertados;
		$this->load->helper(array('html','url','form'));

		$this->load->view('conquer/cabecera');
		$this->load->view('conquer/navegacion');
		$this->load->view('conquer/error');
		$this->load->view('conquer/excel/exito',$data); //echo 'mostrar opciones de excel: exportar e importar';
		$this->load->view('conquer/pie');
		
	}

	


}

?>
